HashiCorp Vault UI Quick Startをやってみた
「HashiCorp Vaultの雰囲気を掴みたい」
HashiCorp Vault入門として、UI Quick Startをやってみたレポートです。
HashiCorp Vaultとは
一言で言うと、機密情報を管理するためのソフトウェアです。
詳細は以下のブログを参照ください。
HashiCorp Valut チュートリアル
公式で用意されているVaultのGetting Startedは3種類あります。
今回はUI Quick Startをやってみます。 UI Quick StartはCLIよりステップが少なく、UIがついている分初めて触るにはとっつきやすいと思います。
しかし、Dynamic SecretsやGithub認証などには触れていません。 上記の機能も試したい場合は、CLI Quick Startもやってみてください。
UI Quick Start
ローカルにVaultをインストールして、Vault Server起動後ポリシーや認証の設定を行うチュートリアルです。
- Getting Started with Vault UI
- Install Vault
- Web UI
- Create Vault Policies
- Manage Authentication Methods
- Manage Secrets Engines
- API Explorer in Vault UI
やってみた
詳細な手順はチュートリアルを見てもらうとして、ざっくり紹介していきます。
Vaultサーバーの起動・ログイン
Vault Serverを起動します。
Vault UIは開発モード以外ではデフォルトで無効になっています。
そのため、設定ファイル(config.hcl)ににui = true
の記述が必要です。
tee config.hcl <<EOF ui = true disable_mlock = true storage "raft" { path = "./vault/data" node_id = "node1" } listener "tcp" { address = "0.0.0.0:8200" tls_disable = "true" } api_addr = "http://127.0.0.1:8200" cluster_addr = "https://127.0.0.1:8201" EOF
vault server -config=config.hcl
ブラウザで「http://127.0.0.1:8200」にアクセスすればVaultのUIを確認できます。
初期設定でUnseal Keyが生成され、VaultをUnsealします。 Unseal KeyはVaultのデータ保護に必要なKeyのため、実際の運用時は機密情報をとして保管する必要があります。
以下では、Unseal Keyを5つ作成して3つ使用すればVaultをUnsealできるように設定しました。
複数人でそれぞれUnseal Keyを1つずつ持てば、Unsealを1人で行えなくなるためセキュリティを強化できます。
設定後Unseal Keyをダウンロードできます。
ダウンロード後にUnseal Keyを使って、ValutをUnsealします。
以下の画面は、Unseal Keyを1つ入力した状態です。(1/3となっている) 3ついれるとUnsealできます。
その後に、Unseal Keyと一緒にダウンロードしたRootトークンを入力することでVaultサーバーにログインできます。
ポリシーの作成
ポリシーを使って、各ユーザーのアクセス制限を行うことができます。
以下はsecret/config
とsys/mounts
をREADできるポリシーを作成している部分です。
最終的には以下のポリシーを割り当てて、このあと作成するユーザーがtransit secretsを操作できるようにします。
# Enable Transit secrets engine path "sys/mounts/transit" { capabilities = ["create", "update"] } # Manage Transit secrets engine keys path "transit/keys" { capabilities = ["list"] } path "transit/keys/*" { capabilities = ["create", "list", "read", "update"] } path "transit/keys/+/config" { capabilities = ["create", "update"] } # Encrypt with any Transit secrets engine key path "transit/encrypt/*" { capabilities = ["create", "update"] } # Decrypt with any Transit secrets engine key path "transit/decrypt/*" { capabilities = ["create", "update"] }
ユーザーの作成
Vaultでは様々な認証方法を使用することができます。
このチュートリアルでは、Username/Passwordの認証情報を作成します。
Secretsの作成
ここからの作業は作成したユーザーで行います。ポリシーで許可している操作以外はできません。
Secretsも多様な選択肢があります。
このチュートリアルではTransitを選択します。 Transitは、セキュアなデータのエンドツーエンドの暗号化を提供するために使用されるSecret Engineです。
作成したSecretのKey Actionsでは暗号化や復号化を試すことができます。
実際にHello
という文字列を暗号化して、復号化してみます。
まずはHello
と入力して、Encryptします。
暗号化後の文字列を得られました。
Decryptに移動して、暗号化後の文字列を入力します。
base64でエンコードされて、平文の文字列が返ってきました。
atob()関数を使って、デコードすることで暗号化前の文字列(Hello
)を得られました。
Transit - Secrets Engines | Vault | HashiCorp Developer
Vault UIでAPIエクスプローラーを使用
Vault UIでAPI エクスプローラーを使用することができます。
この機能を使用することで、VaultのAPIエンドポイントに対してUI上でリクエストを送信し、レスポンスを確認できます。
Vault APIを簡単に実行できて、便利です。
実際にAPIを実行してみます。
UI上でレスポンスを確認できます。 今回は、有効なシークレットエンジンのリストを取得しました。
前の手順で有効化したtransit
が有効になっていることを確認できました。
おわりに
HashiCorp Vault UI Quick Startをやってみました。
UI初めて使いましたが、直感的に操作できていい感じです。 APIエクスプローラーも便利でした。
CLIは難しそうという方もUIから試して見るといいかもしれません。
CLIチュートリアルのほうが触れる機能(Dynamic SecretsやGithub認証)は多いので、どちらも試してみるのがよさそうです。
以上、AWS事業本部の佐藤(@chari7311)でした。